package com.ry.bhwktapp.home.ui

/**
 * kotlin 语言中匿名函数和具名函的对比
 */
fun main() {
//    匿名函数
    niming(12){
        println("+++++++===${it.length}")
    }

    //具名函数
    niming(12,::resuleMeIm)



    //演示？的使用
    var name:String?= "bhw"
    name=null
    println(""+name?.length)



    //let关键字的使用
    var age:String?= null
    age?.let {
        println("===========如果age为null则不执行大括号内的内容 ，否则执行")
    }

//    也可以使用if来判断是否为null
    if (age!=null) {
        age.capitalize();
    }else{
        println("age 为 null")
    }

    //let关键字的使用
    var name1:String?= "Im wangwang"
    val let = name1?.let {
        if (it.isBlank()) {//如果是空值“”走这里
            "默认值"
        } else {
            "[$it]"
        }
    }
    println("===========如果age为null则不执行大括号内的内容 ，否则执行$let")

    //TODO  kotlin语言中的非空断言符特点
    var name3:String? =null
    name3?.capitalize() // name3可能为null所以需要找个补救措施
//      name3!!.capitalize() //跟java的一样了，不管是否null都执行 哪怕会报错（空指针）
    //结论：如果百分百确认name3不为空，可以使用！！ 否则有产生空指针的风险，建议用？.



//   TODO kotlin空合并操作符
    var type : String? = null
//    type="你是小陈吗"
    //若果type为空则走？：后面的逻辑，否则走？:前面的逻辑
//    type?:"哎，我是空啊"
    println(type?:"哎，我是空啊")

//   TODO let函数+空合并操作符
    println(type?.let { "$it" } ?:"哈哈我居然为空啊")


}
//具名函数
fun resuleMeIm(name:String){

}

//内联匿名函数
inline fun  niming(age:Int,resuleMe:(String) -> Unit){
    resuleMe("$age 超过1000就是高寿了")
}